package DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import domain.OrdemServico;

public class QualificacaoDao implements Qualificacao {
	
	public List<OrdemServico> listarOrdem() {
        List<OrdemServico> lista = new ArrayList<OrdemServico>();
        Connection con = null;
        Statement stmt = null;

        try {
            con = Conexao.getConnection();
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("Select * from AGENDASERVICOS WHERE agd_status = 'q' ");
            while (rs.next()) {
            	int id = rs.getInt("agd_id");
        		String datetime = rs.getString("agd_datetime");
        		int duracao = rs.getInt("agd_duracao");
        		String status = rs.getString("agd_status");
        		double precoHora = rs.getDouble("agd_preco_hora");
        		double precoTotal = rs.getDouble("agd_precoTotal");
        		int avQualidade = rs.getInt("agd_avaliacao_qualidade");
        		int avComunicacao = rs.getInt("agd_avaliacao_comunicacao");
        		int avLimpeza = rs.getInt("agd_avaliacao_limpeza");
        		int avPreco = rs.getInt("agd_avaliacao_preco");
        		int prsId = rs.getInt("prs_id");
        		int cliId = rs.getInt("cli_id");
        		int serId = rs.getInt("ser_id");
        		
                lista.add(new OrdemServico(id, datetime, duracao, status.charAt(0), precoHora, precoTotal, avQualidade, avComunicacao, avLimpeza, avPreco, prsId, cliId, serId));
            }
        } catch (SQLException e) {
        	System.out.println("erro aqui");
            e.printStackTrace();
        } finally {
            try {
                stmt.close();
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return lista;

    }

	@Override
	public OrdemServico buscarOrdem(int chave) {
		
		Connection con = null;
        PreparedStatement stmt = null;
        OrdemServico o;
        try {
            con = Conexao.getConnection();
            stmt = con.prepareStatement("Select * from AGENDASERVICOS where agd_id = ?");
            stmt.setString(1, (""+chave));
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
            	int id = rs.getInt("agd_id");
        		String datetime = rs.getString("agd_datetime");
        		int duracao = rs.getInt("agd_duracao");
        		String status = rs.getString("agd_status");
        		double precoHora = rs.getDouble("agd_preco_hora");
        		double precoTotal = rs.getDouble("agd_precoTotal");
        		int avQualidade = rs.getInt("agd_avaliacao_qualidade");
        		int avComunicacao = rs.getInt("agd_avaliacao_comunicacao");
        		int avLimpeza = rs.getInt("agd_avaliacao_limpeza");
        		int avPreco = rs.getInt("agd_avaliacao_preco");
        		int prsId = rs.getInt("prs_id");
        		int cliId = rs.getInt("cli_id");
        		int serId = rs.getInt("ser_id");
        		
               return o = new OrdemServico(id, datetime, duracao, status.charAt(0), precoHora, precoTotal, avQualidade, avComunicacao, avLimpeza, avPreco, prsId, cliId, serId);
            }
   
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {

            /*try {
                //stmt.close();
               // con.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
*/
        }
        return null;
	}
	
	
	@Override
	public boolean qualifica(int id, int qualidade, int comunicacao, int limpeza,int preco) {
		OrdemServico o = buscarOrdem(id);
		Connection con = null;
        PreparedStatement stmt = null;
        
        if(o.getStatus() != 'q'){
        	return false;
        }
        
        try {
            con = Conexao.getConnection();
            stmt = con.prepareStatement("update AGENDASERVICOS set agd_avaliacao_qualidade = ?, "
            													+ "agd_avaliacao_comunicacao = ?, "
            													+ "agd_avaliacao_limpeza = ?, "
            													+ "agd_avaliacao_preco = ? "
            													+ "where agd_id = ?");
            
           stmt.setInt(1, qualidade);
           stmt.setInt(2, comunicacao);
           stmt.setInt(3, limpeza);
           stmt.setInt(4, preco);
           stmt.setInt(5, id);
           stmt.executeUpdate();
           incremento(o.getSerId(), o.getPrsId(), qualidade, comunicacao, limpeza, preco);
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            
        	try {
                stmt.close();
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
		return true;
	}

	
	
	
	public void incremento(int idSer, int idPrs, int qualidade, int comunicacao, int limpeza, int preco ) {
		int med =1;
		Connection con = null;
        PreparedStatement stmt = null;
        PreparedStatement stmt2 = null;
        
        try {
        	con = Conexao.getConnection();
            stmt = con.prepareStatement("Select * from SERVICOSPRESTADOR where ser_id = ? AND prs_id = ?");
            stmt.setString(1, (""+idSer));
            stmt.setString(2, (""+idPrs));
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
            	qualidade += rs.getInt("md_qualidade");
            	comunicacao += rs.getInt("md_comunicacao"); 
            	limpeza += rs.getInt("md_limpeza");
            	preco += rs.getInt("md_preco");
            	med += rs.getInt("md_calc");           
            }	            		
            		
            stmt2 = con.prepareStatement("update SERVICOSPRESTADOR set md_qualidade = ?, "
            													+ "md_comunicacao = ?, "
            													+ "md_limpeza = ?, "
            													+ "md_preco = ?, "
            													+ "md_calc= ? WHERE ser_id = ? AND prs_id = ?");
             
           stmt2.setInt(1, qualidade);
           stmt2.setInt(2, comunicacao);
           stmt2.setInt(3, limpeza);
           stmt2.setInt(4, preco);
           stmt2.setInt(5, med);
           stmt2.setInt(6, idSer);
           stmt2.setInt(7, idPrs);
           stmt2.executeUpdate();
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                stmt.close();
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
		
	}
}
